/*
今天牛牛学到了回文串，他想在数字里面找回文，即回文数，回文数是正着读与倒着读都一样的数，比如1221，343是回文数，433不是回文数。
请输出不超过n的回文数。
输入描述：
输入一个整数n(1 <= n <= 100000)
输出描述：
从1开始按从小到大的顺序输出所有回文数
*/
//我的解法
//#include <stdio.h>
//
//int check_num_count(int n)
//{
//	int count = 1;
//	while (n / 10)
//	{
//		++count;
//		n /= 10;
//	}
//	return count;
//}
//int main() {
//	int n = 0;
//	scanf("%d", &n);
//	int i = 0;
//	int count = 0;
//	int num = 0;
//	for (i = 1; i < n; i++)
//	{
//		if (i < 10)
//		{
//			printf("%d\n", i);
//		}
//		else
//		{
//			//判断几位数
//			int flag = 0;
//			count = check_num_count(i);
//			//从后往前存进一个数组
//			int arr[count];
//			int j = 0;
//			num = i;
//			while (num)
//			{
//				arr[j] = num % 10;
//				num /= 10;
//				j++;
//			}
//			//判断最后一个和第一个是否相等,依次往中间遍历	
//			int left = 0;
//			int right = count - 1;
//			
//			while (left <= right)
//			{
//				if (arr[left] == arr[right])
//				{
//					left++;
//					right--;
//				}
//				else
//				{
//					break;
//				}
//			}
//			
//			if (left > right)
//			{
//				printf("%d\n", i);
//			}
//			
//		}
//		
//	}
//	return 0;
//}

//大神解法

#include<stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	int num = 0;
	int t = 0;
	int i = 0;
	for (i = 1; i < n; i++)
	{
		t = 0;
		num = i;
		while (num)
		{
			/*
			讲解:  num = 343
			1. t = 0 + 3; t - > 3
			2. t = 30 + 4; t -> 34
			3. t = 340 + 3;t - > 343
			*/
			t = t*10 + num%10;
			num /= 10;
		}
		if (t==i)
			printf("%d\n", i);
	}
}
